#pragma once

#include <algorithm/analytical_model/algorithm/Area.h>
#include <algorithm/analytical_model/algorithm/Center.h>
#include <algorithm/analytical_model/algorithm/Normal.h>
#include <algorithm/analytical_model/algorithm/Distance.h>
#include <algorithm/analytical_model/algorithm/FocusCenter.h>


namespace solar
{
    class Cylinder3D;
    class Rectangle3D;

    extern template auto area(Rectangle3D*, bool lazy = false) -> double;
    extern template auto normal(Rectangle3D*, bool lazy = false) -> Vec3;
    extern template auto center(Rectangle3D*, bool lazy = false) -> Vec3;
    extern template auto distance(Rectangle3D*, Rectangle3D*) -> double;
    extern template auto distance(Rectangle3D*, Cylinder3D*) -> double;
    extern template auto focusCenter(Rectangle3D*, Rectangle3D*) -> Vec3;
    extern template auto focusCenter(Rectangle3D*, Cylinder3D*) -> Vec3;
} // namespace solar
